/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modules.estoque.models.dao;

/**
 *
 * @author Clezio
 */
import java.util.List;
import modules.estoque.models.dto.GruposProduto;
import modules.estoque.util.HibernateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
   
 public class GruposProdutoDAO{  
     
     private SessionFactory sessionFactory;
     
     public GruposProdutoDAO() throws Exception{
         sessionFactory = HibernateUtil.getSessionFactory();
     }
       
     public void save(GruposProduto gruposProduto) throws Exception{
         Session session = sessionFactory.openSession();
         Transaction tx = session.beginTransaction();
         if(gruposProduto.getId() > 0){
            session.update(gruposProduto);
         }else{
            session.save(gruposProduto);
         }
         session.flush();
         tx.commit();
         session.close();  
     }  
       
     public java.util.List getList(String condicao) throws Exception{  
         Session session = sessionFactory.openSession();
         Query query = session.createQuery(condicao);
         List gruposProdutos = query.list();
         session.flush();  
         session.close();  
         return gruposProdutos;
     }  
       
     public GruposProduto retrieve(Integer pk) throws Exception{
         Session session = sessionFactory.openSession();
         GruposProduto gruposProduto = (GruposProduto)session.load(GruposProduto.class, pk);
         GruposProduto gruposProdutoDTO = mountDto(gruposProduto);
         session.flush();
         session.close();  
         return gruposProdutoDTO;
     }  
       
     public void delete(GruposProduto GruposProduto) throws Exception{
         Session session = sessionFactory.openSession();
         Transaction tx = session.beginTransaction();
         session.delete(GruposProduto);
         session.flush();
         tx.commit();
         session.close();  
     }

    public GruposProduto mountDto(GruposProduto gruposProduto) {
        GruposProduto gruposProdutoDTO = new GruposProduto();
        gruposProdutoDTO.setId(gruposProduto.getId());
        gruposProdutoDTO.setNome(gruposProduto.getNome());
        gruposProdutoDTO.setAtivo(gruposProduto.isAtivo());
        if(gruposProduto.getGruposProdutosParent() != null){
            gruposProdutoDTO.setGruposProdutosParent(mountDto(gruposProduto.getGruposProdutosParent()));
        }
        gruposProdutoDTO.setProdutoses(gruposProduto.getProdutoses());
        return gruposProdutoDTO;
    }
 }